/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package xml;

import org.xml.sax.SAXParseException;
import xml.parserSAX.SAXException;
import Clases.Atributo;
/**
 *
 * @author Lucas
 */
public class SAXHandler {

    private int numeroTag;
    private String etiqueta;
    private StringBuffer mBuffer;
    public SAXHandler() {
		super();
                
    }

public void startElement (String qName, Atributo attributes) throws SAXException
    {
    	//Si esta empezando la Lista de Pedidos, creo una nueva instancia de ListaPedidos
    	//y le asigno el nombre a la etiqueta.
    	if (qName.equals("ListadoPedidos"))
    	{
    		
    	}

    	//Si esta empezando la Lista de Productos, creo una nueva instancia de ListaProducto
    	//y le asigno el nombre a la etiqueta.
    	if (qName.equals("ListadoProductos"))
    	{
    		
    	}

    	//Si esta empezando un Pedido, creo una nueva instancia de Pedido
    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
    	//y le asigno el pedido a al listado de Pedidos.
    	if (qName.equals("Pedido"))
    	{
    		
    	}

    	//Si esta empezando el Detalle de Pedido, creo una nueva instancia de DetallePedido,
    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
    	//y por ultimo le asigno el pedido al detalle.
    	if (qName.equals("Detalle"))
    	{
    		
    	}

    	//Si encuentra un Producto, creo una nueva instancia de Producto, que se va a ir
    	//cargando al detalle y al producto segun sea o no un componente de producto.
    	//y le asigno el nomre a la etiqueta pera procesarlo en el endElement.
    	if (qName.equals("Producto"))
    	{
    		etiqueta = "Producto";
    		numeroTag++;

    		//Pregunto si el producto es de tipo producto o componente.
    		if(attributes.getNombre().equals("tipo") && attributes.getValor().equals("Producto")){

    			
    		}
    		else if(attributes.getNombre().equals("tipo") && attributes.getValor().equals("Componente"))
    		{
    		
    		}
    	}

    	//Vacio el contenido del Buffer.
    	mBuffer = new StringBuffer();
    }

    /**
     * Cuando el analizador encuentre un simbolo ("</") se ejecutara el metodo endElemnt para procesarlo.
     * @param uri nombre URL, puede no ser procesado.
	 * @param localName es el nombre del elemento (la etiqueta).
	 * @param qName nombre cualificado (con prefijo de espacio de nombre); se utiliza si la propuedad
	 * "namespace-prefixes" es true.
     * @throws org.xml.sax.SAXException dispara una Exception cuando se produce algun error.
     */
    public void endElement (String uri, String localName, String qName) throws SAXException
    {
    	//Pregunto el tipo de etiqueta que encontro es Pedido para procesar sus atributos
    	if(etiqueta.equals("Pedido"))
    	{
    		//Si llega el fin del tag numero, tomo todo el contenido del buffer y asigno el numero al pedio
    		if(qName.equals("Numero"))
    		{
    			
    		}

    		//Si llega el fin del tag fecha, tomo todo el contenido del buffer y asigno la fecha al pedio
    		if(qName.equals("Fecha"))
    		{
    			//Date date = new Date(mBuffer.toString());
    			
    		}
    		//Si llega el fin del tag proveedor, tomo todo el contenido del buffer y asigno el proveedor al pedio
    		if(qName.equals("Proveedor"))
    		{
    			
    		}
    	}

    	//Si llega el final del tag pedido, agrego el pedido a la lista de pedidos.
    	if(qName.equals("Pedido"))
		{
			
		}

    	//Pregunto el tipo de etiqueta que encontro es Detalle para procesar sus atributos
    	if(etiqueta.equals("Detalle"))
    	{
    		//Si llega el fin del tag numero, tomo el contenido del buffer y asigno el numeor al detalle
    		if(qName.equals("Numero"))
    		{
    			
    		}

    		//Si llega el fin del tag cantidad, tomo el contenido del buffer y asigno la cantidad al detalle
    		if(qName.equals("Cantidad"))
    		{
    			
    		}

    	}

    	//Si llega el fin del tag Detalle, agrego ese detalle a la listas de detalle del Pedido
		if(qName.equals("Detalle"))
		{
			
		}

    	//Pregunto el tipo de etiqueta que encontro es Producto para procesar sus atributos
    	if(etiqueta.equals("Producto"))
    	{
    		
    	}
    }

    /**
     * Cuando le analizador encuentra caracteres de datos llama a este metodo para que los procese.
     * @param ch son los caracteres del documento.
     */
     public void characters (String ch)
    {
    	//Guardo en el buffer lo que recibo.
    	//Llegado el fin del tag se toma el contenido del buffer.
    	mBuffer.append(ch);
    }

    /*
     * (non-Javadoc)
     * @see org.xml.sax.helpers.DefaultHandler#warning(org.xml.sax.SAXParseException)
     * Aca arrancan los metodos del API ErrorHandler
     */

    /**
     * Este metodo se encarga de manejar las advertencias detectadas durante el Parsing.
     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
     */
    public void warning(SAXParseException exception) throws SAXException {
        System.out.println("Advertencia"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
        throw new SAXException(SAXException.Tipo.WARNING ,"Advertencia"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
    }

    /**
     * Este metodo se encarga de manejar los errores de formato, ocurridos durante el Parsing.
     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
     */
    public void error(SAXParseException exception) throws SAXException {
        System.out.println("Error de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
        throw new SAXException(SAXException.Tipo.ERROR, "Error de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
    }

    /**
     * Este metodo se encarga de manejar los errres fatales, ocurridos durante el Parsing.
     * Dispara un SAXException para que lo capture la capa superior y lo procese para mostracelo al usuario.
     */
    public void fatalError(SAXParseException exception) throws SAXException {
    	System.out.println("Error Fatal de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
    	throw new SAXException(SAXException.Tipo.FATAL_ERROR, "Error Fatal de analisis"+" Line: "+exception.getLineNumber()+" URI: "+exception.getSystemId()+" Mensaje: "+exception.getMessage());
    }

}

